#include "viml/vm_memoization.h"

namespace viml {

// 已知纯函数列表（数学运算、类型检查等）
const std::unordered_set<std::string> FunctionPurityAnalyzer::known_pure_functions_ = {
    // 数学函数
    "abs", "floor", "ceil", "round", "sqrt", "pow", "exp", "log", "sin", "cos", "tan",
    "asin", "acos", "atan", "max", "min", "mod",
    
    // 字符串函数（不修改原字符串的）
    "len", "strlen", "strpart", "substitute", "match", "matchstr",
    
    // 类型检查函数
    "type", "string", "number", "float", "exists",
    
    // 列表/字典操作（不修改原对象的）
    "get", "has_key", "keys", "values", "items", "count",
    
    // 常见的纯函数名模式
    "is_number", "is_string", "is_list", "is_dict", "is_function",
    
    // 用户常见的数学递归函数
    "Fibonacci", "Fib", "factorial", "fibonacci", "gcd", "power", "lcm"
};

// 已知有副作用的函数列表
const std::unordered_set<std::string> FunctionPurityAnalyzer::known_impure_functions_ = {
    // 输出函数
    "echo", "print", "printf", "echom", "echon",
    
    // 文件操作
    "read", "write", "readfile", "writefile", "delete", "mkdir", "rename",
    
    // 系统函数
    "system", "execute", "eval", "source",
    
    // 时间相关
    "localtime", "strftime", "getpid", "hostname",
    
    // 随机数
    "rand", "srand", "random",
    
    // 全局状态修改
    "set", "unset", "let", "global",
    
    // 列表/字典修改函数
    "add", "insert", "remove", "extend", "sort", "reverse", "uniq",
    "append", "prepend", "push", "pop", "shift", "unshift"
};

} // namespace viml